MySQL 5.7+
如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间。
如果要优化查询,实际上要优化其子任务,优化的方式如下:
- 要么消除其中一些子任务
- 要么减少子任务的执行次数
- 要么让子任务执行的更快
优化数据访问
- 确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能是访问了太多的列。
- 确认 MySQL 服务器层是否在分析大量超过需求的数据行。
是否向数据库请求了不需要的数据
- 查询不需要的计量
- 多表关联时返回全部的列
- 总是取出全部列
- 重复查询相同的数据
MySQL 是否在扫描额外的计量
- 响应时间
- 扫描的行数
- 返回的行数
重构查询的方式
- 一个复杂查询还是多个简单查询
- 切分查询
- 分解关联查询
分解关联查询的优势:
- 让缓存的效率更高
- 将查询分解后,执行单个查询可以减少锁的竞争
- 在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展
- 查询本身效率也可能会有所提升
- 可以减少冗余计量的查询
- 相当于在应用中实现了哈希关联,而不是使用 MySQL 的嵌套循环关联